package usuario.dao;

import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;
import usuario.modelo.Usuario;

public class usuarioDAO {

    public Usuario obtenerPorIdUsuario(String idUsuario) {
        Usuario vo = new Usuario();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/masters3", "root", "");
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("select idUsuario, nombre, ruc, dni, clave, tipo from usuario where id_usuario ='" + idUsuario + "'");
            if (rs.next()) {
                vo.setIdUsuario(rs.getString("idUsuario"));
                vo.setNombre(rs.getString("nombre"));
                vo.setRuc(rs.getString("ruc"));
                vo.setDni(rs.getString("dni"));
                vo.setClave(rs.getString("clave"));
                vo.setTipo(rs.getString("tipo"));
            }
            rs.close();
            stmt.close();
            con.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return vo;
    }
    public Collection<Usuario> buscarPorNombre(String nombre) {
String query = "select idUsuario,nombre,ruc,dni,clave,tipo from usuario where nombre like '%"+nombre +"%'";
Collection<Usuario> c = new ArrayList<Usuario>();
try {
Connection con = ConexionBD.obtenerConexion();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
while(rs.next()) {
Usuario vo = new Usuario();
vo.setIdUsuario(rs.getString("idUsuario"));
vo.setNombre(rs.getString("nombre"));
vo.setRuc(rs.getString("ruc"));
vo.setDni(rs.getString("dni"));
vo.setClave(rs.getString("clave"));
vo.setTipo(rs.getString("tipo"));
c.add(vo);
}
rs.close();
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return c;
}
    public Usuario insertar(Usuario vo) {
String query = "INSERT INTO usuario (idUsuario,nombre,ruc,dni,clave,tipo) " + "VALUES (?,?,?,?,?,?,?,?,?)";
System.err.println(query);
Connection con = null;
PreparedStatement stmt = null;
try {
con = ConexionBD.obtenerConexion();
stmt = con.prepareStatement(query);
stmt.setString(1, vo.getIdUsuario());
stmt.setString(2, vo.getNombre());
stmt.setString(3, vo.getRuc());
stmt.setString(4, vo.getDni());
stmt.setString(5, vo.getClave());
stmt.setString(6, vo.getTipo());

int i = stmt.executeUpdate();
if (i != 1) {
throw new SQLException("No se pudo insertar");
}
stmt.close();
con.close();
} catch (SQLException e) {
System.err.println(e.getMessage());
}
return vo;
}
    public Usuario actualizar(Usuario vo) {
String query = "UPDATE usuario SET nombre=?, ruc=?, dni=?, clave=?, tipo=? WHERE idUsuario=?";
try {
Connection con = ConexionBD.obtenerConexion();
PreparedStatement stmt = con.prepareStatement(query);
stmt.setString(1, vo.getNombre());
stmt.setString(2, vo.getRuc());
stmt.setString(3, vo.getDni());
stmt.setString(4, vo.getClave());
stmt.setString(5, vo.getTipo());
int i = stmt.executeUpdate();
if(i != 1){
throw new SQLException("No se pudo actualizar");
}
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return vo;
}
    public void eliminar(String idUsuario) {
String query = "DELETE FROM usuario WHERE idUsuario=?";
try {
Connection con = ConexionBD.obtenerConexion();
PreparedStatement stmt = con.prepareStatement(query);
stmt.setString(1, idUsuario);
int i = stmt.executeUpdate();
if(i != 1){
throw new SQLException("No se pudo eliminar");
}
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
    public Collection<Usuario> listarTodos() {
Collection<Usuario> c = new ArrayList<Usuario>();
try {
Connection con = ConexionBD.obtenerConexion();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select idUsuario,nombre,ruc,dni,clave,tipo, from usuario");
while (rs.next()) {
Usuario vo = new Usuario();
vo.setIdUsuario(rs.getString("id_usuario"));
vo.setNombre(rs.getString("nombre"));
vo.setRuc(rs.getString("ruc"));
vo.setDni(rs.getString("dni"));
vo.setClave(rs.getString("clave"));
vo.setTipo(rs.getString("tipo"));
c.add(vo);
}
rs.close();
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return c;
}

}
